package com.zp.self.module.level_4_算法练习.数据结构.数组;

/**
 * @author By ZengPeng
 */
public class 力扣_605_种花问题 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_605_种花问题().canPlaceFlowers(new int[]{1,0,0,0,1},2));
    }

    /**
    题目：假设有一个很长的花坛，一部分地块种植了花，另一部分却没有。
         可是，花不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
         给你一个整数数组  flowerbed 表示花坛，由若干 0 和 1 组成，其中 0 表示没种植花，1 表示种植了花。
         另有一个数 n ，能否在不打破种植规则的情况下种入 n 朵花？能则返回 true ，不能则返回 false。

     示例 1：
     输入：flowerbed = [1,0,0,0,1], n = 1
     输出：true

     示例 2：
     输入：flowerbed = [1,0,0,0,1], n = 2
     输出：false

    分析：【】
       1.遍历：将能插入的地方设置为1，n--.判断n==0
        大神：直接判断当前位置是否为1 ，直接跳位+1
            --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
        大神2：可以在两边加0，则不用考虑边界问题了

    边界值 & 注意点：
       1.边界值的考虑
     **/
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        for(int i=0;i<flowerbed.length&&n>0;){
            if(flowerbed[i]==1){
                i=i+2;
            }else if(i==flowerbed.length-1||flowerbed[i+1]==0){
                i=i+2;n--;
            }else{
                i=i+3;
            }
        }
        return n <1;

        //1.遍历：将能插入的地方设置为1，n--.判断n==0
        /*int index = flowerbed.length-1;
        if(flowerbed[0]==0&&(index==0 ||flowerbed[1]==0)){
            flowerbed[0]=1;
            if(--n<1) return true;
        }
        for (int i = 1; i < index; i++) {
            if(flowerbed[i]==0 && flowerbed[i-1]==0 && flowerbed[i+1]==0){
                flowerbed[i]=1;
                if(--n<1) return true;
            }
        }
        if(index>1 && flowerbed[index-1]==0 && flowerbed[index]==0 )
            n--;
        return n<1;*/
    }
}
